﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using vensoft.Entities;
using System.Data;

namespace vensoft.DataAccess
{
    public class HistoricoIngresoPedidoDataAccess : MasterDataAcess, IHistoricoIngresoPedidoDataAccess
    {
        public HistoricoIngresoPedidoDataAccess()
            :base()
        {
        }
        public void RegistrarHistorico(Historico_IngPedido historico_ingped)
        {
            SqlCommand command = base.CreateCommand("RegistrarHistoricoIngPedido");
            AddParameters(historico_ingped, command);
        }

        private void AddParameters(Historico_IngPedido historico_ingped, SqlCommand command)
        {
            base.AddInParameter(command, "ID_Historico", historico_ingped.Id_Historico_Pedido);
            base.AddInParameter(command, "ID_Pedido", historico_ingped.ID_Pedido);
            base.AddInParameter(command, "Raz_Soc", historico_ingped.Raz_Soc);
            base.AddInParameter(command, "Fecha_Pedido", historico_ingped.Fecha_Pedido);
            base.AddInParameter(command, "ID_Almacen", historico_ingped.ID_Almacen);
            base.AddInParameter(command, "Ubicacion", historico_ingped.Ubicacion);
            base.AddInParameter(command, "Fecha_Ingreso", historico_ingped.Fecha);
            base.AddInParameter(command, "nomb_pers", historico_ingped.Nombre_Usuario);
            base.AddInParameter(command, "num_doc", historico_ingped.Num_Doc);
            base.AddInParameter(command, "tipo_doc", historico_ingped.Tipo_Doc);
            base.ExecuteCommand(command);
        }

        public List<Historico_IngPedido> GetAllFromHistoricoDetallePedido()
        {
            SqlCommand comand = base.CreateSelectCommand("GetAllFromHistoricoDetallePedido");
            return SelectObjectFactory(comand);
        }

        private List<Historico_IngPedido> SelectObjectFactory(SqlCommand comand)
        {
            List<Historico_IngPedido> lista = new List<Historico_IngPedido>();
            using (SqlDataReader reader = base.ExecuteReader(comand))
            {
                while (reader.Read())
                {
                    Historico_IngPedido historico = new Historico_IngPedido()
                    {
                        Id_Historico_Pedido = reader.GetInt32(0),
                        ID_Pedido = reader.GetInt32(1),
                        Raz_Soc = reader.GetString(2),
                        Fecha_Pedido = reader.GetDateTime(3),
                        ID_Almacen = reader.GetInt32(4),
                        Ubicacion = reader.GetString(5),
                        Fecha = reader.GetDateTime(6),
                        Nombre_Usuario = reader.GetString(7),
                        Num_Doc = reader.GetString(8),
                        Tipo_Doc = reader.GetString(9)
                    };
                    lista.Add(historico);
                }
            }
            return lista;
        }

        public List<Historico_IngPedido> GetAllFromHistoricoDetallePedidoByFecha(DateTime f_inicio, DateTime f_fin)
        {
            SqlCommand command = base.CreateSelectCommand("GetAllFromHistoricoIngresoPedidoByFecha");
            command.Parameters.AddWithValue("f_inicio", f_inicio);
            command.Parameters.AddWithValue("f_fin", f_fin);
            return SelectObjectFactory(command);
        }

        public List<Historico_IngPedido> GetAllFromHistoricoDetallePedidoByRazSoc(string raz_soc)
        {
            SqlCommand command = base.CreateSelectCommand("GetAllFromHistoricoIngresoPedidoByRaz_Soc");
            command.Parameters.AddWithValue("raz_soc", raz_soc);        
            return SelectObjectFactory(command);
        }
    }
}
